/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2025. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// Package log for frontend interface log
package log

import (
	"sync"

	"frontend/pkg/common/faas_common/logger"
	"frontend/pkg/common/faas_common/logger/config"
	"frontend/pkg/common/faas_common/logger/log"
)

var (
	interfaceLog *logger.InterfaceLogger
	once         sync.Once
)

// CreateInterLogger Create Inter Logger
func CreateInterLogger(logPath string) error {
	cfg := logger.InterfaceEncoderConfig{ModuleName: "frontend"}

	var err error
	if interfaceLog, err = logger.NewInterfaceLogger(logPath, "frontend-interface", cfg); err != nil {
		return err
	}
	return nil
}

// Write Write log String
func Write(msg string) {
	coreInfo, _ := config.GetCoreInfoFromEnv()
	var err error
	once.Do(func() {
		if interfaceLog == nil {
			if err = CreateInterLogger(coreInfo.FilePath); err != nil {
				log.GetLogger().Errorf("failed to create interface logger with error %s", err.Error())
			}
		}
	})
	if err != nil {
		return
	}

	if interfaceLog == nil {
		return
	}

	interfaceLog.Write(msg)
}
